package com.zp.self.module.level_4_算法练习.数据结构.数组;

/**
 * @author By ZengPeng
 */
public class 力扣_80_删除有序数组中的重复项II {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_80_删除有序数组中的重复项II().removeDuplicates(new int[]{1,1,1,2,2,3}));
        System.out.println(new 力扣_80_删除有序数组中的重复项II().removeDuplicates(new int[]{0,0,1,1,1,1,2,3,3}));
        System.out.println(new 力扣_80_删除有序数组中的重复项II().removeDuplicates(new int[]{0}));
        System.out.println(new 力扣_80_删除有序数组中的重复项II().removeDuplicates(new int[]{6}));
    }

    /**
    题目：给你一个有序数组 nums ，请你 原地 删除重复出现的元素，使每个元素 最多出现两次 ，返回删除后数组的新长度。
     不要使用额外的数组空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

     示例 1：
     输入：nums = [1,1,1,2,2,3]
     输出：5, nums = [1,1,2,2,3]
     解释：函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。 不需要考虑数组中超出新长度后面的元素。

     示例 2：
     输入：nums = [0,0,1,1,1,1,2,3,3]
     输出：7, nums = [0,0,1,1,2,3,3]
     解释：函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3 。 不需要考虑数组中超出新长度后面的元素。

    分析：【perfect】
       1.变量记录：当前遍历的点、要插入的点,前面两个身位与当前值是否一致. -- 执行用时：0 ms, 在所有 Java 提交中击败了100.00%的用户

    边界值 & 注意点：
       1.
     **/
    public int removeDuplicates(int[] nums) {
        if(nums.length<3) return nums.length;
        int insert = 2;
        for (int i = 2; i < nums.length; i++) {
            if(nums[i]!=nums[insert-2])
                nums[insert++] = nums[i];
        }
        return insert;
    }
}
